---
title: "L’inconfort ou l’indifférence ? Comprendre l’opposition aux mesures visant à contrer la mésinformation au Québec"
output: html_document
date: "2024-09-24"
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Importer les packages et données

```{r}
# Définir le répertoire de travail
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))

# Importer packages
pacman::p_load(survey, weights, psych, scales, ggpubr, modelsummary, kableExtra, MASS, tidyverse)

#Importer les données
dat <- read_csv("./Data anonymized/pdeq.csv")
```

## Recoder variables

```{r}
# Appui interventions contre la mésinformation
dat <- dat %>% 
  mutate(
    # Traitement (utilisé comme contrôle; une analyse en annexe se concentre sur ceux assignés au groupe contrôle) 
    treatment = case_when(
      Experiment_DO_prompt_control_post == 1 ~ "Control",
      Experiment_DO_prompt_left_post == 1 ~ "Left",
      Experiment_DO_prompt_right_post == 1 ~ "Right",
      TRUE ~ NA_character_
    ),
    # Variables originales
    moderation = misinfo_attitudes2_2_post,
    gov_action = misinfo_attitudes2_3_post,
    # Attribuer la valeur de 6 à ceux qui ont sélectionné "Ne sais pas/Refus"
    moderation_na = case_when(
      !is.na(moderation) ~ moderation,
      !is.na(treatment) & is.na(moderation) ~ 6,
      TRUE ~ NA_real_  
    ),
    gov_action_na = case_when(
      !is.na(gov_action) ~ gov_action,
      !is.na(treatment) & is.na(gov_action) ~ 6,
      TRUE ~ NA_real_  
    ),
    # Créer variables dichotomiques: 1 = Plutôt ou fortement en accord
    moderation01 = dplyr::recode(moderation_na, `1`=0, `2`=0, `3`=0, `4`=1, `5`=1, `6`=0),
    gov_action01 = dplyr::recode(gov_action_na, `1`=0, `2`=0, `3`=0, `4`=1, `5`=1, `6`=0),
    # Créer variables dichotomiques: 1 = Fortement en accord
    moderation_top = case_when(
      moderation_na == 5 ~ 1,
      moderation_na %in% c(1,2,3,4,6) ~ 0
    ),
    gov_action_top = case_when(
      gov_action_na == 5 ~ 1,
      gov_action_na %in% c(1,2,3,4,6) ~ 0
    ),
    # Appui mesuré lors de la vague pré-électorale pour test de robustesse (Tableau B2)
    moderation_pre = misinfo_attitudes2_2_pre,
    moderation_pre2 = misinfo_attitudes2_3_pre)
    
# Variables sociodémographiques
dat <- dat %>% 
  mutate(
  # Âge
    age_cat = case_when(
      age_pre < 35 ~ 0,
      age_pre >= 35 & age_pre < 45 ~ 0.25,
      age_pre >= 45 & age_pre < 55 ~ 0.5,
      age_pre >= 55 & age_pre < 65 ~ 0.75,
      age_pre >= 65 ~ 1, 
      TRUE ~ NA_real_),
    # Genre
    female = case_when(
      gender_pre == 2 ~ 1,
      gender_pre == 1 ~ 0,
      TRUE ~ NA_real_),
    # Éducation
    educ_cat = case_when(
      education_pre %in% c(1:6) ~ 0,
      education_pre %in% c(7:8) ~ 0.5,
      education_pre %in% c(9:11) ~ 1,
      TRUE ~ NA_real_
    ),
    # Région 
    region = case_when(
      region.1_pre == 1 ~ "RMR Montréal",
      region.1_pre == 2 ~ "RMR Québec",
      region.1_pre == 3 ~ "Autres régions"),
    region = factor(region, levels = c("RMR Montréal", "RMR Québec", "Autres régions")),
    # Langues parlées: Voir note #6 dans l'article
    language = case_when(
      UserLanguage_pre == "FR-CA" & is.na(language_1_pre) ~ "Français seulement",
      UserLanguage_pre == "EN" & is.na(language_1_pre) ~ "Anglais seulement",
      UserLanguage_pre == "FR-CA" & !is.na(language_1_pre) ~ "Français et anglais",
      UserLanguage_pre == "EN" & !is.na(language_1_pre) ~ "Anglais et français",
      TRUE ~ NA_character_),
    language = factor(language, levels = c("Français seulement", "Anglais seulement", "Français et anglais", "Anglais et français")))

# Variables politiques
dat <- dat %>% 
  mutate(
    # Idéologie
    ideology = ideology_1_post/10,
    ideology_pre = ideol_1_pre/10,
    # Choix électoral
    vote_choice = case_when(
      yesvote_post == 1 ~ "CAQ",
      yesvote_post == 2 ~ "PLQ",
      yesvote_post == 3 ~ "QS",
      yesvote_post == 4 ~ "PQ",
      yesvote_post == 5 ~ "PCQ",
      yesvote_post == 6 ~ "Autre/N'a pas voté",
      vote_post %in% c(2:7) ~ "Autre/N'a pas voté"
    ),
    vote_choice = factor(vote_choice, levels = c("CAQ", "PLQ", "QS", "PQ", "PCQ", "Autre/N'a pas voté")),
    # Variables dichotomiques pour statistiques descriptives
    vote_caq = case_when(
      yesvote_post == 1 ~ 1, 
      yesvote_post %in% c(2:6) ~ 0,
      vote_post %in% c(2:7) ~ 0),
    vote_plq = case_when(
      yesvote_post == 2 ~ 1, 
      yesvote_post == 1 ~ 0, 
      yesvote_post %in% c(3:6) ~ 0,
      vote_post %in% c(2:7) ~ 0),
    vote_qs = case_when(
      yesvote_post == 3 ~ 1, 
      yesvote_post %in% c(1:2) ~ 0,
      yesvote_post %in% c(4:6) ~ 0,
      vote_post %in% c(2:7) ~ 0),
    vote_pq = case_when(
      yesvote_post == 4 ~ 1, 
      yesvote_post %in% c(1:3) ~ 0,
      yesvote_post %in% c(5:6) ~ 0,
      vote_post %in% c(2:7) ~ 0),
    vote_pcq = case_when(
      yesvote_post == 5 ~ 1, 
      yesvote_post %in% c(1:4) ~ 0,
    yesvote_post ==6 ~ 0,
    vote_post %in% c(2:7) ~ 0),
  # Intentions de vote mesurées lors de la vague pré-électorale pour test de robustesse (Tableau B2)
  vote_choice_pre = case_when(
    votechoice_pre == 1 | vote_unlikely_pre == 1 | vote_advance_pre == 1 ~ "CAQ",
    votechoice_pre == 2 | vote_unlikely_pre == 2 | vote_advance_pre == 2 ~ "PLQ",
    votechoice_pre == 3 | vote_unlikely_pre == 3 | vote_advance_pre == 3 ~ "QS",
    votechoice_pre == 4 | vote_unlikely_pre == 4 | vote_advance_pre == 4 ~ "PQ",
    votechoice_pre == 5 | vote_unlikely_pre == 5 | vote_advance_pre == 5 ~ "PCQ",
    votechoice_pre %in% c(6,7) | vote_unlikely_pre %in% c(6,7) | vote_advance_pre %in% c(6,7) ~ "NSP/Autre/Ne prévoit pas voter",
    vote_likely_pre == 4 ~ "NSP/Autre/Ne prévoit pas voter"))

# Confiance
dat <- dat %>% 
  mutate(
    # Médias traditionnels
    media_trust = recode(info_trust_2_pre, `1`=1, `2`=0.67, `3`=0.33, `4`=0),
    # Médias sociaux
    socmed_trust = recode(info_trust_3_pre, `1`=1, `2`=0.67, `3`=0.33, `4`=0),
    # Gouvernement provincial
    gov_trust = recode(trust_3_pre, `1`=0, `2`=0.25, `3`=0.5, `4`=0.75, `5`=1),
    # Scientifiques
    scientists_trust = recode(trust_1_pre, `1`=0, `2`=0.25, `3`=0.5, `4`=0.75, `5`=1),
    # Variables dichotomiques pour statistiques descriptives par parti
    media_trust_di = case_when(
      info_trust_2_pre %in% c(1,2) ~ 1,
      info_trust_2_pre %in% c(3,4) ~ 0,
      TRUE ~ NA_real_
    ),
    gov_trust_di = case_when(
      trust_3_pre %in% c(4,5) ~ 1,
      trust_3_pre %in% c(1,2,3) ~ 0,
      TRUE ~ NA_real_
    ),
    scien_trust_di = case_when(
      trust_1_pre %in% c(4,5) ~ 1,
      trust_1_pre %in% c(1,2,3) ~ 0,
      TRUE ~ NA_real_
    ))

# Perceptions de la mésinformation
dat <- dat %>% 
  mutate(
    # Préoccupation
    concerned = misinfo_concerned_1_post/10,
    # Liberté d'expression
    free_speech = misinfo_exp1_4_post-1,
    free_speech = free_speech/4,
    # Indice de mésinformation
    trump_winner = case_when(
      legitimate_winner_2_pre == 1 ~ 1,
      legitimate_winner_2_pre == 2 ~ 0.75,
      legitimate_winner_2_pre == 3 ~ 0.25,
      legitimate_winner_2_pre == 4 ~ 0,
      legitimate_winner_2_pre == 5 ~ 0.5,
    ),
    consensus_climate = recode(misinfo_1_pre, `1`=0, `2`=0.25, `3`=0.5, `4`=0.75, `5`=1),
    mass_vaccination = recode(misinfo_2_pre, `1`=0, `2`=0.25, `3`=0.5, `4`=0.75, `5`=1),
    covid_treatments = recode(misinfo_3_pre, `1`=0, `2`=0.25, `3`=0.5, `4`=0.75, `5`=1),
    misinfo_index = consensus_climate+mass_vaccination+covid_treatments+trump_winner,
    misinfo_index = misinfo_index/4,
    # Perceptions que la mésinformation est un problème durant l'élection, tel que mesurées dans la vague pré-électorale (pour Tableau B2)
    problem = misinfo_attitudes_1_pre-1,
    problem = problem/4)

# Design
dat_post <- filter(dat, !is.na(wt_post))
design_post <- svydesign(ids=~1, data=dat_post, weights = dat_post$wt_post)
dat_pre <- filter(dat, !is.na(wt_pre))
design_pre <- svydesign(ids=~1, data=dat, weights = dat$wt_pre)
```

# Statistiques rapportées dans le texte

```{r}
# Nombre d'observations: Vague préélectorale
nrow(dat)

# Nombre d'observations: Vague postélectorale
sum(!is.na(dat$wt_post))

# Corrélation entre l'appui pour la modération de contenu et pour des mesures gouvernementales plus fortes contre la mésinformation
cor.test(dat$moderation, dat$gov_action)

# T-test examinant si la différence entre le pourcentage de répondants appuyant fortement chacune des mesures est statistiquement significative
wtd.t.test(dat$moderation_top, dat$gov_action_top, weight=dat$wt_post, samedata=TRUE)

# Cohérence interne de l'indice de mésinformation
dat %>% 
  dplyr::select(trump_winner, mass_vaccination, covid_treatments, consensus_climate) %>% 
  na.omit() %>% 
 psych::alpha()

# Niveaux de confiance envers les gouvernements, médias et scientifiques en fonction de l'identification partisane
# (Avec données postélectorales pour être cohérent avec le reste de l'article)
svyby(~gov_trust_di, ~vote_choice, design_post, svymean, na.rm = T)
svyby(~media_trust_di, ~vote_choice, design_post, svymean, na.rm = T)
svyby(~scien_trust_di, ~vote_choice, design_post, svymean, na.rm = T)

# (Les résultats changent peu lorsque les données préélectorales sont utilisées)
svyby(~gov_trust_di, ~vote_choice_pre, design_pre, svymean, na.rm = T)
svyby(~media_trust_di, ~vote_choice_pre, design_pre, svymean, na.rm = T)
svyby(~scien_trust_di, ~vote_choice_pre, design_pre, svymean, na.rm = T)
```

# Table 1: Statistiques descriptives: Appui aux mesures contre la mésinformation

```{r}
# Appui pour la modération de contenu : Pourcentage pondérés et intervalle de confiance
pct_moderation <- svymean(~factor(moderation_na), design_post, na.rm = T)
confint_moderation <- confint(svymean(~factor(moderation_na), design_post, na.rm = T))

# Créer base de données
plot_moderation <- data.frame(
  # Mettre le nom des catégories sur plusieurs lignes pour ne pas qu'ils se chevauchent
  moderation = factor(c("Complètement\nen\ndésaccord", "Plutôt\nen\ndésaccord", "Ni en accord,\nni en\ndésaccord", "Plutôt\nen\naccord", "Fortement\nen\naccord", "NSP/\nrefus"), 
                      levels = c("Complètement\nen\ndésaccord", "Plutôt\nen\ndésaccord", "Ni en accord,\nni en\ndésaccord", "Plutôt\nen\naccord", "Fortement\nen\naccord", "NSP/\nrefus")), 
  prop = c(pct_moderation[[1]], pct_moderation[[2]],
           pct_moderation[[3]], pct_moderation[[4]],
           pct_moderation[[5]], pct_moderation[[6]]),
  lower = confint_moderation[1:6],
  upper = confint_moderation[7:12])

# Produire le graphique
plot_moderation <- ggplot(plot_moderation, aes(x = moderation, y = prop, ymin = lower, ymax = upper)) +
  geom_bar(stat = "identity", fill = "cyan3", col = "black")+
  geom_errorbar(width=0.1, alpha=0.9, col = "black")+
  labs(x = "\n Les plateformes de médias sociaux devraient retirer\nle contenu qui contient de la mésinformation.",
       y = "Pourcentage estimé de répondants",
       title = "A) Appui pour la modération de contenu")+
  scale_y_continuous(limits = c(0, 0.52), breaks = c(0, 0.1, 0.2, 0.3, 0.4, 0.5),
                     labels = percent_format(accuracy = 1))+
  theme_minimal()+
  theme(plot.title = element_text(size=12),
        axis.text=element_text(size=10),
        axis.title=element_text(size=11.5),
        plot.margin = unit(c(0.1,0.1,0.1,0.1), "cm"));plot_moderation

# Appui pour l'action gouvernementale : Pourcentage pondérés et intervalle de confiance
pct_gov_action <- svymean(~factor(gov_action_na), design_post, na.rm = T)
confint_gov_action <- confint(svymean(~factor(gov_action_na), design_post, na.rm = T))

# Créer base de données
plot_gov_action <- data.frame(
  # Mettre le nom des catégories sur plusieurs lignes pour ne pas qu'ils se chevauchent
  gov_action = factor(c("Complètement\nen\ndésaccord", "Plutôt\nen\ndésaccord", "Ni en accord,\nni en\ndésaccord", "Plutôt\nen\naccord", "Fortement\nen\naccord", "NSP/\nrefus"), 
                      levels = c("Complètement\nen\ndésaccord", "Plutôt\nen\ndésaccord", "Ni en accord,\nni en\ndésaccord", "Plutôt\nen\naccord", "Fortement\nen\naccord", "NSP/\nrefus")), 
  prop = c(pct_gov_action[[1]], pct_gov_action[[2]],
           pct_gov_action[[3]], pct_gov_action[[4]],
           pct_gov_action[[5]], pct_gov_action[[6]]),
  lower = confint_gov_action[1:6],
  upper = confint_gov_action[7:12]) 

# Produire le graphique
plot_gov_action <- ggplot(plot_gov_action, aes(x = gov_action, y = prop, ymin = lower, ymax = upper)) +
  geom_bar(stat = "identity", fill = "cyan3", col = "black")+
  geom_errorbar(width=0.1, alpha=0.9, col = "black")+
  labs(x = "\n Les gouvernements devraient mettre en place des mesures\nplus fortes pour lutter contre la mésinformation.",
       y = "Pourcentage estimé de répondants", 
       title = "B) Appui pour des mesures gouvernementales plus fortes")+
  scale_y_continuous(limits = c(0, 0.52), breaks = c(0, 0.1, 0.2, 0.3, 0.4, 0.5),
                     labels = percent_format(accuracy = 1))+
  theme_minimal()+
  theme(plot.title = element_text(size=12),
        axis.text.x=element_text(size=10),
        axis.title.x=element_text(size=11.5),
        axis.text.y=element_blank(),
        axis.title.y=element_blank(),
        plot.margin = unit(c(0.1,0.1,0.1,0.1), "cm"));plot_gov_action

# Combiner les deux graphiques et sauvegarder le résultat
distribution_support <- ggarrange(plot_moderation, plot_gov_action, ncol = 2, widths = c(0.53, 0.47))
ggsave(distribution_support, file = "./Figures/Figure1.jpg", width = 10, height = 5)
```

# Figure 2: Statistiques descriptives: Niveau d'appui pour chacune des catégories de variables indépendantes 

### Spécifier les catégories des variables indépendantes

```{r}
levels_x <- rev(c("Genre:",
              "      Homme",
              "      Femme",
              "Âge:",
              "      18-34 ans",
              "      35-44 ans",
              "      45-54 ans",
              "      55-64 ans",
              "      65+ ans",
              "Éducation:",
              "      Secondaire",
              "      Post-secondaire",
              "      Universitaire",
              "Région:",
              "      RMR Montréal",
              "      RMR Québec",
              "      Autres régions",
              "Vote:", 
              "      Coalition Avenir Québec",
              "      Parti libéral",
              "      Québec solidaire",
              "      Parti québécois",
              "      Parti conservateur",
              "      Autre/N'a pas voté",
              "Idéologie:",
              "      0: Gauche",
              "      1",
              "      2",
              "      3",
              "      4",
              "      5",
              "      6",
              "      7",
              "      8",
              "      9",
              "      10: Droite",
              "Confiance gouvernement:",
              "      Méfie beaucoup",
              "      Méfie un peu",
              "      Pas confiance, mais méfie pas",
              "      Un peu confiance",
              "      Beaucoup confiance",
              "Confiance médias:", 
              "      Pas confiance du tout",
              "      Pas beaucoup confiance",
              "      Assez confiance",
              "      Beaucoup confiance ",
              "Confiance médias sociaux:",
              "      Pas confiance du tout ",
              "      Pas beaucoup confiance ",
              "      Assez confiance ",
              "      Beaucoup confiance  ",                  
              "Confiance scientifiques:",
              "      Méfie beaucoup ",
              "      Méfie un peu ",
              "      Pas confiance, mais méfie pas ",
              "      Un peu confiance ",
              "      Beaucoup confiance    ",
              "Priorise liberté expression:",
              "      Fortement en désaccord",
              "      Plutôt en désaccord",
              "      Ni en accord, ni en désaccord",
              "      Plutôt d'accord",
              "      Fortement d'accord",
              "Croit mésinformation:",
              "      Non [0]",
              "      Faible (0-0.25]",
              "      Moyen (0.25-0.5]",
              "      Élevé (0.5-1]",
              "Préoccupation mésinformation:",
              "      0: Pas du tout",
              "      1 ",
              "      2 ",
              "      3 ",
              "      4 ",
              "      5 ",
              "      6 ",
              "      7 ",
              "      8 ",
              "      9 ",
              "      10: Extrêmement"))
```

### Calculer le niveau d'appui par catégorie

```{r}
# Calculer les moyennes pondérées pour la population québécoise
avg_moderation <- svymean(~moderation01, design_post, na.rm = T)
avg_gov <- svymean(~gov_action01, design_post, na.rm = T)

# Sélectionner les variables indépendantes
vars <- c("free_speech", "concerned", "misinfo_index", "gov_trust", "media_trust", "socmed_trust", "scientists_trust", "ideology", "vote_choice", "age_cat", "female", "educ_cat", "region")

# Recoder les variables indépendantes sélectionnées (pour être cohérent avec le nom des catégories ci-haut)
dat_vars <- dat %>% 
  dplyr::select(moderation01, gov_action01, free_speech, concerned, misinfo_index, gov_trust, media_trust, socmed_trust, scientists_trust, ideology, vote_choice, age_cat, female, educ_cat, region, wt_post) %>% 
  mutate(free_speech = dplyr::recode(free_speech, `0`="Fortement en désaccord", `0.25`="Plutôt en désaccord", `0.5`="Ni en accord, ni en désaccord", `0.75`="Plutôt d'accord", `1`="Fortement d'accord"),
         concerned=concerned*10,
         concerned = dplyr::recode(concerned, `0`="0: Pas du tout",`1`="1 ",`2`="2 ",`3`="3 ",`4`="4 ",`5`="5 ",
                                   `6`="6 ",`7`="7 ",`8`="8 ",`9`="9 ",`10`="10: Extrêmement"),
         misinfo_index = case_when(
           misinfo_index == 0 ~ "Non [0]",
           misinfo_index > 0 & misinfo_index <= 0.25 ~ "Faible (0-0.25]",
           misinfo_index > 0.25 & misinfo_index <= 0.5 ~ "Moyen (0.25-0.5]",
           misinfo_index > 0.5  & misinfo_index <= 1 ~ "Élevé (0.5-1]",
           TRUE ~ NA_character_
         ),
         gov_trust = recode(gov_trust, `0`="Méfie beaucoup", `0.25`="Méfie un peu", `0.5`="Pas confiance, mais méfie pas", `0.75`="Un peu confiance", `1`="Beaucoup confiance"),
         scientists_trust = recode(scientists_trust, `0`="Méfie beaucoup ", `0.25`="Méfie un peu ", `0.5`="Pas confiance, mais méfie pas ", `0.75`="Un peu confiance ", `1`="Beaucoup confiance    "),
         media_trust = recode(media_trust, `0`="Pas confiance du tout", `0.33`="Pas beaucoup confiance", `0.67`="Assez confiance", `1`="Beaucoup confiance "),
         socmed_trust = recode(socmed_trust, `0`="Pas confiance du tout ", `0.33`="Pas beaucoup confiance ", `0.67`="Assez confiance ", `1`="Beaucoup confiance  "),
         ideology = dplyr::recode(ideology, `0`="0: Gauche",`0.1`="1",`0.2`="2",`0.3`="3",`0.4`="4",`0.5`="5",
                                  `0.6`="6",`0.7`="7",`0.8`="8",`0.9`="9",`1`="10: Droite"),
         #  ideology*10,
         #ideology = factor(ideology, levels = c("0: Gauche", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10: Droite")),
         vote_choice = dplyr::recode(vote_choice, CAQ="Coalition Avenir Québec", PLQ="Parti libéral", QS="Québec solidaire", PQ="Parti québécois", PCQ="Parti conservateur", `Autre/N'a pas voté`="Autre/N'a pas voté"),
         age_cat = recode(age_cat, `0`="18-34 ans",`0.25`="35-44 ans",`0.5`="45-54 ans",`0.75`="55-64 ans",`1`="65+ ans", ),
         female = ifelse(female == 0, "Homme", "Femme"),
         educ_cat = recode(educ_cat, `0`="Secondaire", `0.5`="Post-secondaire", `1`="Universitaire"))

dat_post2 <- filter(dat_vars, !is.na(wt_post))
design_post2 <- svydesign(ids=~1, data=dat_post2, weights = dat_post2$wt_post)

# Créer fonction pour mesurer le pourcentage pondéré de répondants appuyant les mesures par catégorie
svybys<-function(formula,  bys,  design, FUN, ...){
  
  tms <- attr(terms(bys),"variables")[-1] 
    
    lapply(tms, function(tm){
         eval(bquote(svyby(.(formula),by=~.(tm), design=.(design), FUN=.(FUN), ...)))
    })
}

# Appliquer la fonction à l'ensemble des variables indépendantes
all_means <- svybys(~moderation01+gov_action01,~free_speech+concerned+misinfo_index+gov_trust+media_trust+socmed_trust+scientists_trust+ideology+vote_choice+age_cat+female+educ_cat+region, design_post2, svymean, na.rm = T)
all_means <- purrr::imap(all_means, ~dplyr::rename(., x = 1))
all_means2 <- bind_rows(all_means, .id = "id") %>% 
  mutate(vars = case_when(
    id==1 ~ "Priorise liberté expression",
    id==2 ~ "Préoccupation mésinformation",
    id==3 ~ "Croit mésinformation",
    id==4 ~ "Confiance gouvernement",
    id==5 ~ "Confiance médias",
    id==6 ~ "Confiance médias sociaux",
    id==7 ~ "Confiance scientifiques",
    id==8 ~ "Idéologie",
    id==9 ~ "Vote",
    id==10 ~ "Âge",
    id==11 ~ "Genre",
    id==12 ~ "Éducation",
    id==13 ~ "Région"
  )) %>% 
  rename(v1_pct = moderation01,
         v2_pct = gov_action01,
         v1_se = se.moderation01,
         v2_se = se.gov_action01)

# Mettre les données dans le format désiré
all_means2 <- all_means2 %>% 
  pivot_longer(!c(id, x, vars), 
               names_to = c("names", ".value"), 
               names_sep="_") %>% 
  mutate(qc = rep(c(avg_moderation[[1]], avg_gov[[1]]), times = 68),
         dv = ifelse(names == "v1", "Modération de contenu", "Mesures gouvernementales"),
         vars = factor(vars, 
                       levels = c("Genre", "Âge", "Éducation", "Région",
                                  "Vote", "Idéologie",
                                  "Confiance gouvernement", "Confiance médias", "Confiance médias sociaux",
                                  "Confiance scientifiques", 
                                  "Priorise liberté expression", "Croit mésinformation",
                                  "Préoccupation mésinformation")),
         cat = case_when(
           vars %in% c("Genre", "Âge", "Éducation", "Région") ~ "Sociodémographiques",
           vars %in% c("Vote", "Idéologie") ~ "Orientations politiques",
           vars %in% c("Confiance gouvernement", "Confiance médias", "Confiance scientifiques", 
                       "Confiance médias sociaux") ~ "Confiance",
           vars %in% c("Priorise liberté expression", "Croit mésinformation",
                       "Préoccupation mésinformation") ~ "Perceptions"))

# Ajouter des rangées contenant le nom des variables
for(i in 1:nrow(all_means2)){
  if(i == 1){
    all_means2 <- add_row(all_means2, x = paste(all_means2$vars[i], ":", sep = ""),
                          dv = "cat")
  }else if(all_means2$vars[i] != all_means2$vars[i-1]){
    all_means2 <- add_row(all_means2, x = paste(all_means2$vars[i], ":", sep = ""),
                          dv = "cat")
  }
}

# Ajouter des espaces avant le nom des catégories (mais pas le nom des variables)
all_means2$x <- ifelse(!is.na(all_means2$pct), paste("      ", all_means2$x, sep = ""), all_means2$x)

all_means2 <- all_means2 %>% 
  mutate(x = factor(x, levels = levels_x),
         vars = case_when(
           !is.na(vars) ~ vars,
           x == "Âge:" ~ "Âge",
           x == "Genre:" ~ "Genre",
           x == "Éducation:" ~ "Éducation",
           x == "Région:" ~ "Région",
           x == "Vote:" ~ "Vote",
           x == "Idéologie:" ~ "Idéologie",
           x == "Confiance gouvernement:" ~ "Confiance gouvernement",
           x == "Confiance médias:" ~ "Confiance médias",
           x == "Confiance médias sociaux:" ~ "Confiance médias sociaux",
           x == "Confiance scientifiques:" ~ "Confiance scientifiques",
           x == "Préoccupation mésinformation:" ~ "Préoccupation mésinformation",
           x == "Croit mésinformation:" ~ "Croit mésinformation",
           x == "Priorise liberté expression:" ~ "Priorise liberté expression"
         ),
         cat  = case_when(
           !is.na(cat) ~ cat,
           x == "Âge:" ~ "Sociodémographiques",
           x == "Genre:" ~ "Sociodémographiques",
           x == "Éducation:" ~ "Sociodémographiques",
           x == "Région:" ~ "Sociodémographiques",
           x == "Vote:" ~ "Orientations politiques",
           x == "Idéologie:" ~ "Orientations politiques",
           x == "Confiance gouvernement:" ~ "Confiance",
           x == "Confiance médias:" ~ "Confiance",
           x == "Confiance médias sociaux:" ~ "Confiance",
           x == "Confiance scientifiques:" ~ "Confiance",
           x == "Préoccupation mésinformation:" ~ "Perceptions",
           x == "Croit mésinformation:" ~ "Perceptions",
           x == "Priorise liberté expression:" ~ "Perceptions"
         ),
         cat = factor(cat, levels = c("Sociodémographiques", "Confiance", 
                                      "Orientations politiques", "Perceptions")))

# Fonction permettant de montrer la différence par rapport à la moyenne québécoise dans le graphique
t_shift <- scales::trans_new("shift",
                             transform = function(x) {x-0.7195},
                             inverse = function(x) {x+0.7195})

tmp = all_means2 %>% distinct(vars, x, .keep_all = T) %>% arrange(x)
which(tmp$dv == "cat")
which(tmp$dv != "cat")
```

### Produire et sauvegarder la Figure 2

```{r}
plot_baselines <- ggplot(all_means2, aes(x = x, y = pct, yintercept = qc)) +
  geom_bar(aes(fill = dv), stat = "identity", width = 0.7, position = position_dodge(width = 1)) +
  # geom_point(aes(col = dv), position = position_dodge(width = 0.5), size = 1.5) +
  geom_hline(yintercept = 0.7195)+
      facet_wrap(cat~., scales = "free_y", ncol = 2)+
  scale_fill_manual(values = c("white", "cyan3", "black"), labels = c("", "Mesures gouvernementales", "Modération de contenu"))+
  scale_y_continuous(labels = percent_format(accuracy = 1),
                     trans = t_shift)+
  coord_flip()+
  labs(x = "",
       y = "Pourcentage pondéré de répondants appuyant les mesures",
       fill = " ")+
  theme_minimal()+
 theme(legend.position = "top",
         axis.text.y = element_text(hjust = 0),
       strip.text = element_text(size = 11.5));plot_baselines 
  
 ggsave(plot_baselines, file = "./Figures/Figure2.jpg", width = 7.5, height = 9)
```

# Tableau 1: Régression linéaire visant à expliquer l'appui aux interventions contre la mésinformation

```{r}
# Variables sociodemographiques
model1_a <- lm(moderation ~ age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)
model1_b <- lm(gov_action ~ age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)

# Variables politiques
model2_a <- lm(moderation ~ ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)
model2_b <- lm(gov_action ~ ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)

# Confiance
model3_a <- lm(moderation ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)
model3_b <- lm(gov_action ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)

# Perceptions de la mésinformation
model4_a <- lm(moderation ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)
model4_b <- lm(gov_action ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post)

# Create table
modelsummary(list(model1_a, model1_b, model2_a, model2_b, model3_a, model3_b, model4_a, model4_b),
             coef_map = c('female' = 'Genre: Femme',
                          'age_cat' = 'Âge', 
                          'educ_cat' = 'Éducation',
                          'regionRMR Québec' = 'RMR Québec',
                          'regionAutres régions' = 'Autre région',
                          'ideology' = 'Idéologie',
                          'vote_choicePLQ' = 'Vote: PLQ',
                          'vote_choiceQS' = 'Vote: QS',
                          'vote_choicePQ' = 'Vote: PQ',
                          'vote_choicePCQ' = 'Vote: PCQ',
                          "vote_choiceAutre/N'a pas voté" = "Vote: Autre/N'a pas voté",
                          'gov_trust' = 'Confiance: Gouvernement',
                          'media_trust' = 'Confiance: Médias',
                          'socmed_trust' = 'Confiance: Médias sociaux',
                          'scientists_trust' = 'Confiance: Scientifiques',
                          'concerned' = 'Préoccupé par la mésinformation',
                          'free_speech' = "Liberté d'expression",
                          'misinfo_index' = 'Indice mésinformation',
                          '(Intercept)' = '(Intercept)'),
             fmt = 2,
  estimate  = "{estimate} ({std.error}){stars}",
  statistic = NULL,
             stars = T, output = "./Tables/Tableau1.docx", gof_omit = 'AIC|BIC|Std.Errors')
```

# Annexes 

## Annexe A

## Texte: Charactéristiques de l'échantillon rapportées dans le texte

```{r}
# Nombre d'observations: Vague préélectorale
nrow(dat)

# Nombre d'observations: Vague postélectorale
sum(!is.na(dat$wt_post))

# Genre
mean(dat_post$female, na.rm = T)

# Âge
median(dat$age_post, na.rm = T)
sd(dat$age_post, na.rm = T)
```

## Tableau A1: Charactéristiques de l'échantillon 

```{r}
tableau1 <- data.frame(
  Catégorie = c("Homme", "Femme", "18-24 ans", "25-34 ans", "35-44 ans", "45-54 ans", "55-64 ans", "65+ ans", "Montréal RMR",
                "Québec RMR", "Reste du Québec"),
  `Population générale` = c(48.8, 51.3, 10.2, 15.4, 16.0, 17.4, 18.3, 22.8, 50.5, 9.9, 39.6),
  `Sondage préélectoral` = c(round(as.numeric(table(dat$female))/sum(!is.na(dat$female))*100, 1), 
                             round(as.numeric(table(dat$age_group_pre))/sum(!is.na(dat$age_pre))*100, 1),
                             round(as.numeric(table(dat$region.1_pre))/sum(!is.na(dat$region.1_pre))*100, 1)),
  `Sondage postélectoral` = c(round(as.numeric(table(dat_post$female))/sum(!is.na(dat_post$female))*100, 1), 
                              round(as.numeric(table(dat_post$age_group_post))/sum(!is.na(dat_post$age_post))*100, 1),
                              round(as.numeric(table(dat_post$region.1_pre))/sum(!is.na(dat_post$region.1_pre))*100, 1))
) %>% 
  kbl() %>% 
  kable_classic(html_font = "Calibri") %>% 
  save_kable(file = "./Tables/TableauA1.html", self_contained = T)
```

## Tableau A2: Statistiques descriptives

```{r}
# Sélectionner les variables
select_desc <- dat_post %>% dplyr::select(female, age_group_pre, educ_cat, ideology_1_post, vote_caq, vote_plq, vote_qs, vote_pq, vote_pcq, trust_3_pre, info_trust_2_pre, info_trust_3_pre, trust_1_pre, misinfo_concerned_1_post, misinfo_exp1_4_post, misinfo_index)

# Renommer les variables
varnames_desc <- c("Genre: Femme", "Âge (6 catégories)", "Éducation (3 catégories)", "Idéologie (gauche-droite)", "Vote CAQ", "Vote PLQ", "Vote QS", "Vote PQ", "Vote PCQ", "Confiance gouvernement provincial", "Confiance médias", "Confiance médias sociaux", "Confiance scientifiques", "Préoccupé par mésinformation", "Priorise liberté d'expression", "Indice de mésinformation")

# Produire Tableau de statistiques descriptives
desc_moderation <- as.data.frame(psych::describe(select_desc, fast = T))
rownames(desc_moderation) <- varnames_desc
desc_moderation <- desc_moderation %>% 
  round(digits = 2) %>% 
  dplyr::select(-vars, -range, -se)  %>% 
  kbl() %>% 
  kable_classic(html_font = "Calibri") %>% 
  save_kable(file = "./Tables/TableauA2.html", self_contained = T)
```

## Annexe B

## Tableau B1: Régression logistique ordinale

```{r}
# Transformer les variables dépendantes en facteurs
dat <- dat %>% 
  mutate(moderation_f = factor(moderation),
         gov_action_f = factor(gov_action))

# Estimer modèles: Variables sociodemographiques
polr1_a <- polr(moderation_f ~ age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)
polr1_b <- polr(gov_action_f ~ age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)

# Estimer modèles: Variables politiques
polr2_a <- polr(moderation_f ~ ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)
polr2_b <- polr(gov_action_f ~ ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)

# Estimer modèles: Confiance
polr3_a <- polr(moderation_f ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)
polr3_b <- polr(gov_action_f ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)

# Estimer modèles: Perceptions de la mésinformation
polr4_a <- polr(moderation_f ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)
polr4_b <- polr(gov_action_f ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region + treatment, data = dat, weights = wt_post, Hess=TRUE)

# Produire tableau de régression
modelsummary(list(polr1_a, polr1_b, polr2_a, polr2_b, polr3_a, polr3_b, polr4_a, polr4_b),
             coef_map = c('female' = 'Genre: Femme',
                          'age_cat' = 'Âge', 
                          'educ_cat' = 'Éducation',
                          'regionRMR Québec' = 'RMR Québec',
                          'regionAutres régions' = 'Autre région',
                          'ideology' = 'Idéologie',
                          'vote_choicePLQ' = 'Vote: PLQ',
                          'vote_choiceQS' = 'Vote: QS',
                          'vote_choicePQ' = 'Vote: PQ',
                          'vote_choicePCQ' = 'Vote: PCQ',
                          "vote_choiceAutre/N'a pas voté" = "Vote: Autre/N'a pas voté",
                          'gov_trust' = 'Confiance: Gouvernement',
                          'media_trust' = 'Confiance: Médias',
                          'socmed_trust' = 'Confiance: Médias sociaux',
                          'scientists_trust' = 'Confiance: Scientifiques',
                          'concerned' = 'Préoccupé par la mésinformation',
                          'free_speech' = "Liberté d'expression",
                          'misinfo_index' = 'Indice mésinformation'),
             fmt = 2,
             estimate  = "{estimate} ({std.error}){stars}",
             exponentiate = T,
             statistic = NULL,
             stars = T, output = "./Tables/TableauB1.docx")
```

## Tableau B2: Test de robustesse: Données de la vague préélectorale

```{r}
# Estimer modèles: Variables sociodemographiques
model1_pre_a <- lm(moderation_pre ~ age_cat + female + educ_cat + region, data = dat, weights = wt_pre)
model1_pre_b <- lm(moderation_pre2 ~ age_cat + female + educ_cat + region, data = dat, weights = wt_pre)

# Estimer modèles: Variables politiques
model2_pre_a <- lm(moderation_pre ~ ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)
model2_pre_b <- lm(moderation_pre2 ~ ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)

# Estimer modèles: Confiance
model3_pre_a <- lm(moderation_pre ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)
model3_pre_b <- lm(moderation_pre2 ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)

# Estimer modèles: Perceptions de la mésinformation
model4_pre_a <- lm(moderation_pre ~ problem + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)
model4_pre_b <- lm(moderation_pre2 ~ problem + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology_pre + vote_choice_pre + age_cat + female + educ_cat + region, data = dat, weights = wt_pre)

# Produire tableau de régression
modelsummary(list(model1_pre_a, model1_pre_b, model2_pre_a, model2_pre_b, model3_pre_a, model3_pre_b, model4_pre_a, model4_pre_b),
             coef_map = c('female' = 'Genre: Femme',
                          'age_cat' = 'Âge', 
                          'educ_cat' = 'Éducation',
                          'regionRMR Québec' = 'RMR Québec',
                          'regionAutres régions' = 'Autre région',
                          'ideology_pre' = 'Idéologie',
                          'vote_choice_prePLQ' = 'Vote: PLQ',
                          'vote_choice_preQS' = 'Vote: QS',
                          'vote_choice_prePQ' = 'Vote: PQ',
                          'vote_choice_prePCQ' = 'Vote: PCQ',
                          "vote_choice_preNSP/Autre/Ne prévoit pas voter" = "Vote: NSP/Autre/Ne prévoit pas voter",
                          'gov_trust' = 'Confiance: Gouvernement',
                          'media_trust' = 'Confiance: Médias',
                          'socmed_trust' = 'Confiance: Médias sociaux',
                          'scientists_trust' = 'Confiance: Scientifiques',
                          'problem' = 'Problème sérieux',
                          'misinfo_index' = 'Indice mésinformation',
                          '(Intercept)' = '(Intercept)'),
             fmt = 2,
  estimate  = "{estimate} ({std.error}){stars}",
  statistic = NULL,
             stars = T, output = "./Tables/TableauB2.docx", gof_omit = 'AIC|BIC|Std.Errors')
```

## Tableau B3: Test de robustesse: Restreindre l'analyse à ceux assignés au groupe contrôle

```{r}
# Restreindre l'échantillon au groupe contrôle
dat_control <- filter(dat, treatment == "Control")

# Estimer modèles: Variables sociodemographiques
model1c_a <- lm(moderation ~ age_cat + female + educ_cat + region, data = dat_control)
model1c_b <- lm(gov_action ~ age_cat + female + educ_cat + region, data = dat_control)

# Estimer modèles: Variables politiques
model2c_a <- lm(moderation ~ ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)
model2c_b <- lm(gov_action ~ ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)

# Estimer modèles: Confiance
model3c_a <- lm(moderation ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)
model3c_b <- lm(gov_action ~ gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)

# Estimer modèles: Perceptions de la mésinformation
model4c_a <- lm(moderation ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)
model4c_b <- lm(gov_action ~ free_speech + concerned + misinfo_index + gov_trust + media_trust + socmed_trust + scientists_trust + ideology + vote_choice + age_cat + female + educ_cat + region, data = dat_control)

# Produire tableau de régression
modelsummary(list(model1c_a, model1c_b, model2c_a, model2c_b, model3c_a, model3c_b, model4c_a, model4c_b),
             coef_map = c('female' = 'Genre: Femme',
                          'age_cat' = 'Âge', 
                          'educ_cat' = 'Éducation',
                          'regionRMR Québec' = 'RMR Québec',
                          'regionAutres régions' = 'Autre région',
                          'ideology' = 'Idéologie',
                          'vote_choicePLQ' = 'Vote: PLQ',
                          'vote_choiceQS' = 'Vote: QS',
                          'vote_choicePQ' = 'Vote: PQ',
                          'vote_choicePCQ' = 'Vote: PCQ',
                          "vote_choiceAutre/N'a pas voté" = "Vote: Autre/N'a pas voté",
                          'gov_trust' = 'Confiance: Gouvernement',
                          'media_trust' = 'Confiance: Médias',
                          'socmed_trust' = 'Confiance: Médias sociaux',
                          'scientists_trust' = 'Confiance: Scientifiques',
                          'concerned' = 'Préoccupé par la mésinformation',
                          'free_speech' = "Liberté d'expression",
                          'misinfo_index' = 'Indice mésinformation',
                          '(Intercept)' = '(Intercept)'),
             fmt = 2,
  estimate  = "{estimate} ({std.error}){stars}",
  statistic = NULL,
             stars = T, output = "./Tables/TableauB3.docx", gof_omit = 'AIC|BIC|Std.Errors')
```
